package com.cskaoyan.javase.array._4operation._1get;

/**
 * 求数组中元素的极值(最大值/最小值)
 * 思路:
 *      先假设某个元素的值是极值,然后遍历数组中每个元素,逐一比较,如果不是极值,它就会被替代
 *      直到遍历完,比较完整个数组,得到极值
 *
 * @since 15:00
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 21, 312, 9999, 12, 312, 3, 1, 32, 123, 2, 4, 21, 3, 12, 3, 124, -32, 412, 3, 12};
        System.out.println(getMaxValue(arr));
        System.out.println(getMinValue(arr));
    }

    // 求int[]类型数组中元素的最大值
    public static Integer getMaxValue(int[] arr) {
        // 排除null和长度为0的数组,它们不能进行极值的获取
        if (arr == null || arr.length == 0) {
            // 返回值不好给
            System.out.println("数组不合法!");
            /*
                如果碰到这种返回值不好给的情况,普遍的解决方法有两种:
                    1.抛出异常
                    2.改返回值类型
                        笨一点的方法,改成int[]
                        好一点的办法,用包装类型,int类型的包装类Integer
             */
            return null;
        }
        // 1.假设第一个元素是最大值
        int max = arr[0];
        // 2.遍历数组,然后逐个比较,如果某个元素大,极值交换
        // 遍历数组两种方式: 1.for 2.增强for都可以
        // 普通for循环遍历数组,可以从第二个元素开始遍历比较
        /*for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }*/
        for (int element : arr) {
            if (element > max) {
                max = element;
            }
        }
        return max;
    }

    // 求int[]类型数组中元素的最小值
    public static int getMinValue(int[] arr) {
        // 1.假设第一个元素是最小值
        int min = arr[0];
        // 2.遍历数组,然后逐个比较,如果某个元素小,极值交换
        for (int element : arr) {
            if (element < min) {
                min = element;
            }
        }
        return min;
    }

}
